Managing application sessions and session state is an important aspect of software operability. For example, if an application unexpectedly shuts down while a user is using it (e.g., due to a crash), the user may desire to restore her session to its identical pre-crash state. In some cases, a user of an application may desire to revert or have access to a previous state of her session (e.g., several hours or days ago). Also, in some cases, a user may want to transfer an identical application session from one device to another, or to replicate or “fork” an application session to have two identical sessions.
Existing technologies typically attempt to resolve the above challenges using file “save” and “open” mechanisms. Some applications automatically save a file while it is worked on by a user. For example, an application may save a file every few minutes while a user is working on it and, if the application undergoes an unexpected termination, the application can make the most recent saved version of the file available to the user the next time the user opens the application on the device. Some existing technologies have an automatic process of storing previously saved versions of a file so that, if the user wants to revert to a previous version of the file, she can browse through a history of previously saved versions and open a previous version of the file. Also, if a user wants to transfer a session to another device, she can transfer her file to the other device and open it there.
However, such technologies have significant drawbacks. In many cases, opening a saved file does not restore several aspects of the application session in which the file was saved. This fails to reproduce the exact session in that when a session is restored, reverted, or duplicated from a saved file, not all aspects of the session are recreated. Namely, with conventional file save technologies, the aspects of the user's session that are recreated are limited to what is saved and opened in the file. Numerous other aspects of the session may be lost. Such lost aspects may include data that is stored by cut, copy, and paste functions (e.g., data copied to a clipboard in a word processing application), a history of changes (e.g., changes that can be reversed using the “undo” command), and various other attributes of the session that are not captured by a file “save” function. In light of all of these shortcomings, a more efficient system is desirable for capturing and reproducing the full state of application sessions.